package com.heima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.common.exception.NoSuchIdException;
import com.heima.mapper.SkuClassMapper;
import com.heima.mapper.SkuMapper;
import com.heima.pojo.Sku;
import com.heima.pojo.SkuClass;
import com.heima.pojo.dto.SkuDto;
import com.heima.pojo.dto.SkuPageDto;
import com.heima.pojo.vo.SkuPageVo;
import com.heima.pojo.vo.SkuVo;
import com.heima.service.SkuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Optional;

@Service
@Slf4j
public class SkuServiceImpl implements SkuService {

    @Autowired
    private SkuMapper skuMapper;

    @Autowired
    private SkuClassMapper skuClassMapper;


    /**
     * 新增商品
     * @param dto
     */
    @Override
    public void addSku(SkuDto dto) {
        //拷贝对象
        Sku sku = new Sku();
        BeanUtils.copyProperties(dto,sku);
        //补齐基本信息
        sku.setCreateTime(LocalDateTime.now());
        sku.setUpdateTime(LocalDateTime.now());
        sku.setIsDiscount((short)0);
        skuMapper.addSku(sku);
    }

    /**
     * 商品搜索
     * @param dto
     * @return
     */
    @Override
    public SkuPageVo pageQuery(SkuPageDto dto) {
        //健壮性判断
        dto.check();
        //告知PageHelper页码和记录数
        PageHelper.startPage(dto.getPageIndex(),dto.getPageSize());
        //调用Mapper
        Page<Sku> page =  skuMapper.pageQuery(dto);
        SkuPageVo vo = new SkuPageVo();
        vo.setPageIndex(dto.getPageIndex());
        vo.setPageSize(dto.getPageSize());
        vo.setTotalPage(page.getPages());
        vo.setTotalCount(page.getTotal());
        vo.setCurrentPageRecords(page.getResult());
        //获取所有的商品分类
        List<SkuClass> skuClasses = skuClassMapper.queryAll();
        //遍历page中的sku比对classId,如果比对成功,为SkuClass赋值
        page.forEach(sku -> {
            for (SkuClass skuClass : skuClasses) {
                if(sku.getClassId() == skuClass.getClassId()){
                    sku.setSkuClass(skuClass);
                }
            }
        });
        return vo;
    }

    /**
     * 修改商品
     * @param dto
     */
    @Override
    public void update(SkuDto dto) {
        //拷贝对象
        Sku sku = new Sku();
        BeanUtils.copyProperties(dto,sku);
        //补齐基本信息
        sku.setUpdateTime(LocalDateTime.now());
        //判断id是否存在
        Sku skuInfo = skuMapper.queryById(sku.getSkuId());
        Optional<Sku> optional = Optional.ofNullable(skuInfo);
        if (optional.isEmpty()){
            throw new NoSuchIdException("未查询到该商品Id");
        }
        //调用mapper
        skuMapper.updateInfo(sku);
    }



    /**
     * 查询前几的商品
     * @param topValue
     * @param first
     * @param last
     * @return
     */
    @Override
    public List<SkuVo> queryTopSku(Integer topValue, Date first, Date last) {

       return skuMapper.queryTopSku(topValue,first,last);
    }
}
